home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / mac / LOGIC Apple II 5.25" Library - ProDOS / PRO002.dsk / THREE.DIM.bas < prev   
BASIC Source File  |  2012-02-16  |  4KB  |  166 lines

  1. 10  PRINT  CHR$(27);: PRINT  CHR$(17): REM 40 COL.
  2. 20  TEXT : HOME 
  3. 30 V = 1: GOSUB 40:V = 24: GOSUB 40: GOTO 60
  4. 40  VTAB (V): HTAB (1): FOR X = 1 TO 39: PRINT "_";: NEXT 
  5. 50  RETURN 
  6. 60  VTAB (5): HTAB (7)
  7. 70  PRINT "[ THIS PROGRAM IS FREEWARE ]"
  8. 80  PRINT : PRINT : HTAB (4)
  9. 90  PRINT "YOU ARE FREE TO DISTRIBUTE COPIES"
  10. 100  PRINT : HTAB (8)
  11. 110  PRINT "BUT YOU MAY NOT SELL THEM."
  12. 120  VTAB (18): HTAB (11)
  13. 130  PRINT "THE FREEWARE PROJECT"
  14. 140  PRINT : HTAB (11)
  15. 150  PRINT "WALDEN SOFTWARE, INC."
  16. 160  PRINT : HTAB (12)
  17. 170  PRINT "(C) 1984, P. LUTUS"
  18. 180  FOR PAUSE = 0 TO 2500: NEXT 
  19. 190  GOTO 770
  20. 200  REM 
  21. 210  REM THIS SECTION TRANSFORMS EACH 3D IMAGE  
  22. 220  REM POINT, THEN DRAWS THE LINES
  23. 230  REM 
  24. 240  ONERR  GOTO 490
  25. 250  REM SET UP GRAPHICS MODE
  26. 260  HGR : HCOLOR= 3
  27. 270 L = 0
  28. 280  REM READ IMAGE POINT
  29. 290 D = I%(L,0)
  30. 300  IF D =  -1  THEN  RETURN 
  31. 310 X = I%(L,1)
  32. 320 Y = I%(L,2)
  33. 330 Z = I%(L,3)
  34. 340  REM TRANSFORM POINT
  35. 350  FOR I = 1 TO 3
  36. 360 T(I) = (M(1,I) *X) +(M(2,I) *Y) +(M(3,I) *Z)
  37. 370  NEXT I
  38. 380 Z =  -(T(3) *BZ/300) +13
  39. 390 X = OX +(T(1) *BX/Z)
  40. 400 Y = OY -(T(2) *BY/Z)
  41. 410  REM DISPLAY LINE (OLD X,Y TO NEW X,Y)
  42. 420  IF   NOT D  THEN 440
  43. 430  HPLOT LX,LY TO X,Y
  44. 440 LX = X:LY = Y
  45. 450  REM REPEAT FOR NEXT LINE
  46. 460 L = L +1
  47. 470  GOTO 290
  48. 480  REM PRINT ERROR MESSAGE AND RETURN
  49. 490  GOSUB 1400
  50. 500  INPUT "IMAGE TOO LARGE (RETURN) :";L$
  51. 510  GOTO 910
  52. 520  REM 
  53. 530  REM THIS SECTION FILLS THE MATRIX WITH 
  54. 540  REM THE TRIG VALUES FOR (AX,AY,AZ)
  55. 550  REM 
  56. 560  REM CONVERT DEGREES TO RADIANS
  57. 570 AX = DX/F:AY = DY/F:AZ = DZ/F
  58. 580  REM GET TRIG VALUES FOR EACH ANGLE
  59. 590 SX =  SIN(AX):CX =  COS(AX)
  60. 600 SY =  SIN(AY):CY =  COS(AY)
  61. 610 SZ =  SIN(AZ):CZ =  COS(AZ)
  62. 620  REM FILL MATRIX WITH TRIG VALUES
  63. 630 M(1,1) = CZ *CY
  64. 640 M(2,1) = SZ
  65. 650 M(3,1) = SY *CZ
  66. 660 M(1,2) = SX *SY -SZ *CX *CY
  67. 670 M(2,2) = CZ *CX
  68. 680 M(3,2) =  -CY *SX -SY *SZ *CX
  69. 690 M(1,3) =  -CX *SY -SZ *CY *SX
  70. 700 M(2,3) = CZ *SX
  71. 710 M(3,3) = CY *CX -SX *SZ *SY
  72. 720  RETURN 
  73. 730  REM 
  74. 740  REM MAIN PROGRAM LINE
  75. 750  REM 
  76. 760  REM SET UP INITIAL VALUES & CONSTANTS 
  77. 770 X = 0:Y = 0:Z = 0:D = 0
  78. 780  DIM I%(100,3)
  79. 790  DIM M(3,3)
  80. 800  DIM T(3)
  81. 810 BX = 7:BY = 7:BZ = 7
  82. 820 DX = 20:DY = 20:DZ = 0
  83. 830 OX = 140:OY = 70
  84. 840 F = 57.29577951
  85. 850  GOSUB 1400
  86. 860  REM GO READ IMAGE TABLE
  87. 870  GOSUB 1430
  88. 880  REM DRAW THE IMAGE
  89. 890  GOSUB 1120
  90. 900  REM GET CONSOLE INPUT 
  91. 910  GOSUB 1400
  92. 920  PRINT "[ FREEWARE 3D IMAGE PROGRAM (P. LUTUS) ]"
  93. 930  PRINT "[D]RAW,[P]OS,[S]CALE,[A]NGLE,[Q]UIT:";
  94. 940  GET L$
  95. 950  IF L$ = ""  THEN 910
  96. 960 C =  ASC(L$)
  97. 970  IF C >96  THEN C = C -32
  98. 980 L$ =  CHR$(C)
  99. 990  PRINT L$
  100. 1000  REM EXECUTE COMMAND & RETURN
  101. 1010  GOSUB 1040
  102. 1020  GOTO 910
  103. 1030  REM COMMAND DECODER  
  104. 1040  GOSUB 1400
  105. 1050  IF L$ = "D"  THEN 1120
  106. 1060  IF L$ = "P"  THEN 1160
  107. 1070  IF L$ = "S"  THEN 1210
  108. 1080  IF L$ = "A"  THEN 1260
  109. 1090  IF L$ = "Q"  THEN  TEXT : HOME : PRINT  CHR$(4)"-STARTUP"
  110. 1100  RETURN 
  111. 1110  REM FILL MATRIX & DRAW IMAGE
  112. 1120  GOSUB 570
  113. 1130  GOSUB 240
  114. 1140  RETURN 
  115. 1150  REM SELECT SCREEN OFFSETS
  116. 1160 X = OX:Y = OY:Z = 0
  117. 1170  GOSUB 1310
  118. 1180 OX = X:OY = Y
  119. 1190  RETURN 
  120. 1200  REM SELECT IMAGE SCALES
  121. 1210 X = BX:Y = BY:Z = BZ
  122. 1220  GOSUB 1310
  123. 1230 BX = X:BY = Y:BZ = Z
  124. 1240  RETURN 
  125. 1250  REM SELECT ROTATION ANGLES
  126. 1260 X = DX:Y = DY:Z = DZ
  127. 1270  GOSUB 1310
  128. 1280 DX = X:DY = Y:DZ = Z
  129. 1290  RETURN 
  130. 1300  REM CONSOLE INPUT PROCESSOR
  131. 1310 P$ = "X":V = X: GOSUB 1350:X = V
  132. 1320 P$ = "Y":V = Y: GOSUB 1350:Y = V
  133. 1330 P$ = "Z":V = Z: GOSUB 1350:Z = V
  134. 1340  RETURN 
  135. 1350  PRINT "ENTER ";P$;" (NOW ";V;") (NO ENTRY=SAME):";
  136. 1360  INPUT "";L$
  137. 1370  IF L$ < >""  THEN V =  VAL(L$)
  138. 1380  RETURN 
  139. 1390  REM CLEAR TEXT PART OF SCREEN
  140. 1400  HOME : VTAB (21)
  141. 1410  RETURN 
  142. 1420  REM READ IMAGE TABLE
  143. 1430  RESTORE 
  144. 1440 L = 0
  145. 1450  READ I%(L,0)
  146. 1460  IF I%(L,0) =  -1  THEN  RETURN 
  147. 1470  READ I%(L,1),I%(L,2),I%(L,3)
  148. 1480 L = L +1: GOTO 1450
  149. 1490  REM IMAGE TABLE
  150. 1500  REM FORMAT: (1=DRAW,0=MOVE),(X,Y,Z)
  151. 1510  REM IN CARTESIAN COORDINATES
  152. 1520  REM LAST ENTRY = -1
  153. 1530  DATA 0,-100,-100,-100
  154. 1540  DATA 1,100,-100,-100 
  155. 1550  DATA 1,100,-100,100
  156. 1560  DATA 1,-100,-100,100  
  157. 1570  DATA 1,-100,-100,-100
  158. 1580  DATA 1,0,100,0
  159. 1590  DATA 1,100,-100,100 
  160. 1600  DATA 0,-100,-100,100 
  161. 1610  DATA 1,0,100,0
  162. 1620  DATA 1,100,-100,-100
  163. 1630  REM MARK LOWER RIGHT FRONT
  164. 1640  DATA 0,100,-100,80
  165. 1650  DATA 1,80,-100,100
  166. 1660  DATA -1